package com.wgf.controller;

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import dev.langchain4j.community.model.dashscope.WanxImageModel;
import dev.langchain4j.data.image.Image;
import dev.langchain4j.model.output.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
@Slf4j
public class WanxImageModelController
{
    @Autowired
    private WanxImageModel wanxImageModel;

    // http://localhost:9006/image/create2
    @GetMapping(value = "/image/create2")//`WanxImageModel` 是langchain4j社区对阿里云通义万相模型的一个封装
    public String createImageContent2() throws IOException
    {
        System.out.println(wanxImageModel);
        Response<Image> imageResponse = wanxImageModel.generate("穿着luolita的18岁高中学生");

        System.out.println(imageResponse.content().url());

        return imageResponse.content().url().toString();

    }


    @GetMapping(value = "/image/create3")//`ImageSynthesis` 是阿里云DashScope SDK提供的原生图像生成类，使用它需要自己构建参数并处理响应，但它可能提供更底层的控制和最新的特性。
    public String createImageContent3() throws IOException
    {

        String prompt = "远景镜头，18岁的中国女孩，穿着jk裙，身高168cm，体重90斤" +
                "在阳光明媚的室外，精致的淡妆，很漂亮。";
        ImageSynthesisParam param =//创建了一个ImageSynthesisParam对象，用于配置图像生成的参数
                ImageSynthesisParam.builder()//使用建造者模式构建参数对象
                        .apiKey(System.getenv("aliQwen-api"))//从环境变量中获取名为"aliQwen-api"的API密钥
                        .model(ImageSynthesis.Models.WANX_V1)//指定使用的模型，这里是WANX_V1
                        .prompt(prompt)//设置提示文本，即之前定义的prompt变量
                        .style("<watercolor>")//设置图像风格为水彩画
                        .n(1)//生成图像的数量为1张
                        .size("1024*1024")//设置图像大小为1024x1024像素
                        .build();//构建参数对象

        ImageSynthesis imageSynthesis = new ImageSynthesis();//创建ImageSynthesis实例，用于调用图像生成API
        ImageSynthesisResult result = null;//初始化结果变量为null
        try {
            System.out.println("---sync call, please wait a moment----");
            result = imageSynthesis.call(param);//调用图像生成API，传入参数对象，并获取结果
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }


        System.out.println(JsonUtils.toJson(result));//将API调用结果转换为JSON字符串并返回给客户端

        return JsonUtils.toJson(result);
    }
}
